import { updateQueryStringParameter } from './tools'
import Vue from 'vue'
import wx from 'weixin-js-sdk'
import { weChatApi } from '@/apis'
import store from '../stores'

class AppUtil {
  static async hideMenu() {
    if (this.WeChatData) {
      this.wx.hideOptionMenu()
      this.wx.hideToolbar()
    } else {
      const res = await weChatApi.getWeChatSign({
        url: location.href.split('#')[0]
      })
      if (!res.code) {
        this.WeChatData = res.data
        AppUtil.setWeChat(res.data)
      }
    }
  }
  static async setWeChat(data) {
    const _this = this
    this.wx = wx
    if (!this.wx) {
      return
    }
    wx.config({
      debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      appId: data.app_id, // 必填，公众号的唯一标识
      timestamp: data.timestamp, // 必填，生成签名的时间戳
      nonceStr: data.nonce_str, // 必填，生成签名的随机串
      signature: data.signature, // 必填，签名，见附录1
      jsApiList: [
        'onMenuShareTimeline',
        'onMenuShareAppMessage'
      ]
    })
    wx.ready(function() {
      _this.wx.hideOptionMenu()
      // _this.ShareTimelineInit()
    })
    // this.isMini = await this.isMiniProgram()
    console.log('this.wx', this.wx)
  }
  static callNativeFunction(functionString, params, callBack) {
    var methodName = (functionString.replace(/function\s?/mi, '').split('('))[0]
    var callBackName = methodName + 'CallBack'
    var message

    if (!callBack) {
      message = { 'methodName': methodName, 'params': params }
      window.webkit.messageHandlers.__BSNLAPPLinkBridge__.postMessage(message)
    } else {
      message = { 'methodName': methodName, 'params': params, 'callBackName': callBackName }
      if (!Event._listeners[callBackName]) {
        Event.addEvent(callBackName, function(data) {
          callBack(data)
        })
      }
      window.webkit.messageHandlers.__BSNLAPPLinkBridge__.postMessage(message)
    }
  }
  static call(json) {
    let res = ''
    if (window.APPCALL && window.APPCALL.__BSNLAPPLinkBridge__) {
      res = window.APPCALL.__BSNLAPPLinkBridge__(JSON.stringify(json))
    }
    if (window.__BSNLAPPLinkBridge__) {
      res = window.__BSNLAPPLinkBridge__(JSON.stringify(json))
    }
    if (this.wx && this.wx.miniProgram && this.wx.miniProgram.getEnv && json.type === 'multi' || json.type === 'goods') {
      this.wx.miniProgram.getEnv((res) => {
        if (!res.miniprogram) {
          return
        } else {
          this.wx.miniProgram.navigateTo({
            url: '/pages/secondLevel/middleWare/index?json=' + JSON.stringify(json)
          })
        }
      })
    }
    return res
  }
  static isMiniProgram(n) {
    return new Promise((resolve, reject) => {
      if (navigator.userAgent.toLowerCase().indexOf('micromessenger') === -1) {
        resolve(false)
        return
      } else {
        if (!this.wx.miniProgram) {
          resolve(false)
          return
        }
        this.wx.miniProgram.getEnv((res) => {
          if (!res.miniprogram) {
            resolve(false)
            return
          } else {
            resolve(true)
          }
        })
      }
    })
  }
  static getPlatFrom() {
    if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { // 判断iPhone|iPad|iPod|iOS
      return 'bx_ios'
    } else if (/(Android)/i.test(navigator.userAgent)) { // 判断Android
      return 'bx_android'
    } else {
      return ''
    }
  }
  static isWechat() {
    var ua = window.navigator.userAgent.toLowerCase()
    if (ua.match(/MicroMessenger/i)) {
      return ua.match(/MicroMessenger/i).toString() === 'micromessenger'
    } else {
      return false
    }
  }
  static BrowseShareClick() {
    const env = this.isWechat()
    if (!env) {
      Vue.$vux.toast.text('请使用浏览器自带的分享按钮进行分享吧')
    } else {
      Vue.$vux.toast.text('点击右上角进行分享操作吧！')
    }
  }
  static IsAppInstall() {
    const isApp = window.__BSNLAPPLinkBridge__ || window.APPCALL
    return isApp
  }
  static ShareTimelineInit() {
    this.ShareTimeline({
      title: '碧选-全球品牌社交电商平台', // 分享标题
      link: location.origin + location.pathname + '#/home/index', // 分享链接
      imgUrl: 'https://oss.bisinuolan.cn/default-1568795237944-58042a75ac66485491c3f328818bd070.png', // 分享图标
      desc: '代理终身免费打卡领面膜 年省16000+' // 分享描述

    })
  }
  static updateInviteCode(link) {
    if (store.getters.user) {
      return updateQueryStringParameter(link, 'invite_code', store.getters.user.invite_code)
    }
    return link
  }
  static ShareTimeline(option = {}) {
    if (!this.wx) {
      return
    }
    // option.link addshare
    if (option.link && store.getters.user) {
      option.link = this.updateInviteCode(option.link)
    }
    const optionData = {
      title: option.title, // 分享标题
      link: option.link, // 分享链接
      imgUrl: option.imgUrl || 'https://oss.bisinuolan.cn/default-1563962695692-927a362bdd10460da7a42ec4da400206.png', // 分享图标
      desc: option.desc, // 分享描述
      success() {
        option.success()
      },
      cancel() {
        option.error()
      }
    }
    // 分享给朋友
    this.wx.ready(() => {
      this.wx.onMenuShareAppMessage(optionData)
      // 分享到朋友圈
      this.wx.onMenuShareTimeline(optionData)
      console.log('optionData', optionData)
    })
  }
  static setTitle(data = {}) {
    let platform = sessionStorage.getItem('__PAGE_PLATFORM__')
    if (data.query && data.query.platform) {
      platform = data.query.platform
      sessionStorage.setItem('__PAGE_PLATFORM__', data.query.platform)
    }
    window.__sensors__.track('webPageView', {
      web_url: (location.origin + location.pathname + '#' + data.path) || location.href,
      web_title: data.title || '碧选',
      platform: platform || 'H5'
    })
    if (data.title === '碧选') {
      return
    }
    const jsonBreak = {
      type: 'title',
      data: data.title
    }
    this.call(jsonBreak)
    const json = {
      type: 'setTitle',
      data: {
        title: data.title,
        isHide: Boolean(data.isHide)
      }
    }
    if (!data.title) {
      return
    }
    return this.call(json)
  }
  static nativeLink(to) {
    var json = {
      type: 'nativeLink',
      data: to
    }
    return this.call(json)
  }
  static MNSettle(data) {
    var json = {
      type: 'mSettle',
      data: data
    }
    return this.call(json)
  }
  static openService(data) {
    var json = {
      type: 'service',
      data: data
    }
    return this.call(json)
  }
  static share(data) {
    var json = {
      type: 'share',
      data: data
    }
    return this.call(json)
  }
  static back(data) {
    var json = {
      type: 'returnButtonClick',
      data: data
    }
    return this.call(json)
  }
  static callMulti(json) {
    return this.call(json)
  }
  static getUserInfo(need_login, vue) {
    var json = {
      type: 'getUser',
      data: {
        need_login: need_login
      }
    }
    return this.loginByApp(this.call(json), vue)
  }
  static loginByApp(userInfo, vue) {
    if (!userInfo) {
      vue.$store.dispatch('LoginByApp', '')
      return false
    }
    try {
      vue.$store.dispatch('LoginByApp', JSON.parse(userInfo))
    } catch (error) {
      vue.$vux.toast.text('app返回格式错误')
    }
    return true
  }
  static getToken() {
    var json = {
      'JSCallType': 11,
      'FunName': 'getToken',
      'Data': {}
    }
    window.APPCall(JSON.stringify(json))
    // alert(JSON.stringify(json));
    return window.getToken(JSON.stringify(json))
    // alert(JSON.stringify(json));
  }
  // 支付
  static Pay(orderId, payLogsType, payType) {
    var json = {
      'JSCallType': 10,
      'Data': {
        'Type': payType,
        'PayLogsType': payLogsType,
        'OrderId': orderId
      }
    }
    // 判断是否是微信浏览器的函数
    var ua = window.navigator.userAgent.toLowerCase()
    if (ua.match(/MicroMessenger/i) === 'micromessenger') {
      Vue.$vux.toast.text(`请下载碧选app进行支付`)
      return true
    }
    window.APPCall(JSON.stringify(json))
  }

  static ClearCache() {
    var json = {
      'JSCallType': 7,
      'Data': {}
    }
    window.APPCall(JSON.stringify(json))
  }

  static WeiXinLogin() {
    var json = {
      'JSCallType': 2,
      'Data': {}
    }
    window.APPCall(JSON.stringify(json))
  }

  static WeiXinShare(title, description, img, webPageUrl) {
    var json = {
      'JSCallType': 4,
      'Data': {
        'title': title,
        'description': description,
        'img': img,
        'webPageUrl': webPageUrl
      }
    }
    window.APPCall(JSON.stringify(json))
  }

  // Type=” PhotoLibrary”本地图库，Type=” Camera”打开相机
  static UploadPhoto(type, url, maxCount, isCut) {
    url = url || window.config.PictureUploadUrl
    // alert(`maxCount${maxCount}`);
    maxCount = maxCount || 1
    isCut = isCut === undefined
    var json = {
      'JSCallType': 3,
      'Data': {
        'Type': type,
        'Url': url,
        'MaxCount': maxCount,
        'IsCut': isCut
      }
    }
    // alert(JSON.stringify(json));
    console.log(JSON.stringify(json))
    window.APPCall(JSON.stringify(json))
  }

  static GetCurrentVersion() {
    var json = {
      'JSCallType': 8,
      'Data': {}
    }
    // alert(JSON.stringify(json));
    window.APPCall(JSON.stringify(json))
  }

  static UpdateApp() {
    var json = {
      'JSCallType': 9,
      'Data': {}
    }
    // alert(JSON.stringify(json));
    window.APPCall(JSON.stringify(json))
  }
  // 发送错误日志
  static UploadErrorLog(error) {
    var json = {
      'JSCallType': 15,
      'Data': error
    }
    // console.log(json);
    window.APPCall(JSON.stringify(json))
  }
  // 复制到剪切板
  static Copy(target) {
    var json = {
      'JSCallType': 16,
      'Data': target
    }
    console.log(json)
    window.APPCall(JSON.stringify(json))
  }
  // 获得设备号
  static GetDeviceId() {
    var json = {
      'JSCallType': 17,
      'Data': {}
    }
    window.APPCall(JSON.stringify(json))
  }
  static WeiXinPay(data) {
    this.wechatID = data
    console.log('this.wechatID', this.wechatID)
    if (typeof WeixinJSBridge === 'undefined') {
      if (document.addEventListener) {
        document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady, false)
      } else if (document.attachEvent) {
        document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady)
        document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady)
      }
    } else {
      this.onBridgeReady(data)
    }
  }
  static onBridgeReady(data) {
    const subData = {
      'appId': data.appId, // 公众号名称，由商户传⼊入
      'timeStamp': data.timeStamp, // 时间戳 这⾥里随意使⽤用了⼀一个值
      'nonceStr': data.nonceStr, // 随机串
      'package': data.package,
      'signType': data.signType, // 微信签名⽅方式:sha1
      'paySign': data.paySign // 微信签名
    }
    alert('subData: ' + JSON.stringify(subData))
    window.WeixinJSBridge.invoke('getBrandWCPayRequest', subData,
      function(e) {
        alert(e.err_msg)
      })
  }
}
export default AppUtil
window.APPCallHandler = function(jsonString) {}
window.__BSNLAPPCallHandler__ = function(jsonString) {}
window.APPCall = function(jsonString) {}
window.APPCallBack = function(jsonString) {
  try {
    // if (!CheckSign(jsonString)) {
    //   Toast('APP返回数据验签失败')
    //   return
    // }
    if (window.APPCallHandler && typeof APPCallHandler === 'function') {
      window.APPCallHandler(jsonString)
    }

    // const result = JSON.parse(jsonString)
    // if (result.JSCallType == 11 && result.Code == 0) {
    //   const isWeixinEnable = result.Data.some(function(element) { return element.Name == 'weixin' && element.IsInstall == true })
    //   localStorage.setItem('isWeixinEnable', isWeixinEnable)
    // }
    // if (result.JSCallType == 17 && result.Code == 0) {
    //   // Toast("deviceId"+result.Data);
    //   localStorage.setItem('deviceId', result.Data)
    // }
  } catch (e) {
    // Toast(e.name + ':' + e.message)
    return false
  }
}
// window.CheckSign = function(jsonString) {
//   try {
//     const json = JSON.parse(jsonString)
//     var Key = 'EwRSVEu6NrXcgfGrd8MmH87QVQLLqz9g'
//     var sign = md5(json.Ticket + json.Version + json.JSCallType + JSON.stringify(json.Data) + Key)
//     sign = sign.toUpperCase()
//     return json.Sign == sign
//   } catch (e) {
//     Toast(e.name + ':' + e.message)
//     return false
//   }
// }
// document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);

// function onBridgeReady() {
//   window.WeixinJSBridge.invoke('getBrandWCPayRequest', {
//     'appId': 'wxf8b4f85f3a794e77', // 公众号名称，由商户传⼊入
//     'timeStamp': '189026618', // 时间戳 这⾥里随意使⽤用了⼀一个值
//     'nonceStr': 'adssdasssd13d', // 随机串
//     'package':
//     'body=xxx&fee_type=1&input_charset=GBK&notify_url=http&out_trade_no=16642817866003386000&partner=1900000109&return_url=http&spbill_create_ip=127.0.0.1&total_fee=1&sign=273B7EEEE642A8E41F27213D8517E0E4', // 扩展字段，由商户传⼊入
//     'signType': 'SHA1', // 微信签名⽅方式:sha1
//     'paySign': 'b737015b5b1eabe5db580945a07eac08c7bb55f8' // 微信签名
//   },
//   function(e) {
//     alert(e.err_msg)
//   })
// }
// callpay()
// function callpay() {
//   //  console.log('typeof WeixinJSBridge', alert(typeof WeixinJSBridge))
//   if (typeof WeixinJSBridge === 'undefined') {
//     if (document.addEventListener) {
//       document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false)
//     } else if (document.attachEvent) {
//       document.attachEvent('WeixinJSBridgeReady', onBridgeReady)
//       document.attachEvent('onWeixinJSBridgeReady', onBridgeReady)
//     }
//   } else {
//     onBridgeReady()
//   }
// }
